from typing import Optional

from pydantic import BaseModel, Field


class CreateRegionTypeSchema(BaseModel):
    type: str = Field(description="Тип региона")


class EditRegionTypeSchema(BaseModel):
    type: str = Field(description="Новый тип региона")


class GetRegionTypeSchema(BaseModel):
    id: int = Field(description="Идентификатор типа регона")
    type: str = Field(description="Тип региона")


class CreateRegionRequestSchema(BaseModel):
    name: str = Field(description="Название региона")
    parentRegion: str = Field(
        default=None, description="Название родительского региона"
    )
    regionType: int = Field(default=None, description="Идентификатор типа региона")
    latitude: float = Field(description="Координаты широты")
    longitude: float = Field(description="Координаты долготы")
    latitude1: float = Field(description="Координаты широты")
    longitude1: float = Field(description="Координаты долготы")


class CreateRegionResponseSchema(BaseModel):
    id: int = Field(description="Идентификатор регион")
    name: str = Field(description="Название региона")
    parentRegion: str | None = Field(description="Название родительского региона")
    regionType: int | None = Field(description="Идентификатор типа региона")
    latitude: float = Field(description="Координаты широты")
    longitude: float = Field(description="Координаты долготы")
    latitude1: float = Field(description="Координаты широты")
    longitude1: float = Field(description="Координаты долготы")


class GetRegionResponseSchema(BaseModel):
    id: int = Field(description="Идентификатор регион")
    regionType: int | None = Field(description="Идентификатор типа региона")
    accountId: int = Field(description="Аккаунт внесший данные о регионе")
    name: str = Field(description="Название региона")
    parentRegion: str | None = Field(description="Название родительского региона")
    latitude: float = Field(description="Координаты широты")
    longitude: float = Field(description="Координаты долготы")
    latitude1: float = Field(description="Координаты широты")
    longitude1: float = Field(description="Координаты долготы")


class RegionEditRequestSchema(BaseModel):
    name: str = Field(description="Новое название региона")
    parentRegion: str = Field(
        default=None, description="Новое название родительского региона"
    )
    latitude: float = Field(description="Новые координаты широты")
    longitude: float = Field(description="Новые координаты долготы")
    latitude1: float = Field(description="Новые координаты широты")
    longitude1: float = Field(description="Новые координаты долготы")
    regionType: int = Field(
        default=None, description="Новый идентификатор типа региона"
    )


class RegionEditResponseSchema(BaseModel):
    id: int = Field(description="Идентификатор региона")
    name: str = Field(description="Новое имя региона")
    parentRegion: str = Field(description="Новое название родительского региона")
    latitude: float = Field(description="Новые координаты широты")
    longitude: float = Field(description="Новые координаты долготы")
    latitude1: float = Field(description="Новые координаты широты")
    longitude1: float = Field(description="Новые координаты долготы")
